'''
Created on 14/04/2013

@author: victor
'''

from pm.database import db
from sqlalchemy.orm import relationship

class Usuarios(db.Model):
    '''
    Clase que representa a un usuario en el sistema
    '''
    __tablename__ = 'usuarios'
    id_usuario = db.Column(db.Integer, primary_key=True, nullable=False)
    '''
       id_usuario representa la clave del usuario
    '''
    user_name = db.Column(db.String(64), unique=True, nullable=False)
    '''
       user_name es la denominacion corta que tendra el usuario en lugar del nombre, en el momento de ingreso al sistema
    '''
    password = db.Column(db.String(40), nullable=False)
    '''
       password es la contrasenha del usuario
    '''
    nombre = db.Column(db.String(64), nullable=False)
    '''
       nombre es la denominacion que tiene el usuario, el nombre del mismo
    '''
    apellido = db.Column(db.String(64), nullable=False)
    '''
       apellido es el apellido del usuario
    '''
    telefono = db.Column(db.String(64), nullable=True)
    '''
       telefono es numero telefonico perteneciente al usuario
    '''
    direccion = db.Column(db.String(64), nullable=True)
    '''
       direccion es direccion en la cual reside el usuario
    '''
      
    correo = db.Column(db.String(64), nullable=False)
    '''
       representa al correo del usuario
    ''' 
    activo = db.Column(db.Boolean, nullable=False)
    '''
       representa al usuario en estado activo o inactivo
    ''' 
    cedula = db.Column(db.String(30), nullable=False)
    
    relationship("usuarios_roles") 
    
    # bg = deferred(Column("bg", LargeBinary, nullable=True )) #Column("bg", LargeBinary) 

    def __init__(self, user_name='', password='', nombre='', apellido='', direccion='', telefono='', correo='', activo=True, cedula=''):
        '''
        @param user_name: nombre de usuario del sistema
        @param password: contrasenha del usuario
        @param nombre: nombre del usuario
        @param apellido: apellido del usuario
        @param telefono: telefono del usuairo
        @param correo: correo del usuario
        @param activo: indica si el usuario esta o no activo
        @param cedula: cedula de la persona  
              
        '''
        
        self.user_name = user_name
        self.password = password
        self.nombre = nombre
        self.apellido = apellido
        self.telefono = telefono
        self.direccion = direccion
        self.correo = correo
        self.activo = activo
        self.cedula = cedula
           
    def __repr__(self):
        return '{id:%s, user_name:%s, nombre:%s, apellido:%s}' % (self.id_usuario, self.user_name, self.nombre, self.apellido)
    
    def __json__(self):
        
        '''
         devuelve el json que representa a Usuarios
        '''
        return {'id':self.id_usuario ,
                'user_name': self.user_name,
                'nombre': self.nombre,
                'apellido': self.apellido ,
                'telefono': self.telefono ,
                'direccion':self.direccion,
                'password':self.password,
                'correo': self.correo,
                'activo': self.activo,
                'cedula': self.cedula
                
                }
       
    
